iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 3
0
Modern Web

認識 Sails.js - 如何建構一個 MVC 網站系列 第 3

認識 Sails.js - 專案結構 (1)

  • 分享至 

  • xImage
  •  

在上一篇透過 cli 指令,已經快速建好了網站的基本雛形,現在讓我們來看看裡面有什麼東西。

$ tree -d -L 1
.
├── api
├── assets
├── config
├── tasks
└── views

api 資料夾

API 的全名是 Application Programming Interface,顧名思義就是放我們應用程式主要邏輯的地方。

$ tree api -d -L 1
api
├── controllers
├── models
├── policies
├── responses
└── services

若你寫過 JAVA 想必你非常熟悉這兩個資料夾,因為參與開發 Sails 的主要開發者中,曾在 stackoverflow 上說過 Sails 主要是參照 Rails 架構,但 Rails 中一些令人詬病的設計,則是參照 JAVA 架構來改善,若你是 JAVA 的開發者,當你在使用 Sails 時,總是有一種親切感。

Controller 的責任

  • 檢查值

例如事前檢查某個值應該為數字或者不該為 null,當發生非預期的情況時丟出 Error。

  • 決定流程的走向

走哪個 view 或 response http code,並處理最外層的 Error。

create : async(req,res) => {
  try{
    // 略...
    if(product){
      return res.view("success_view");
    }else{
      return res.view("failure_view");
    }
  } catch(e){
    return res.serverError(e);
  }
}
  • call service

Service 的責任

  • 商業邏輯

例如:寄信、訂單計算、與第三方平台溝通...

getServiceFee : async(user, order) => {
  let isVip = UserService.isVip(user);
  if(order.paymentTotalAmount > largeOrderAmount || isVip ){
    return 0; // 免運
  }else{
    return 70;
  }
}
  • 複雜的物件生成
getNewUser : async(...略...) => {
  let newUser = {
    username: newUser.username,
    email: newUser.email,
    // (略...)
    password: newUser.password
  }
  return newUser;
}
  • 與資料庫溝通

這個框架並沒有定義 Dao 的架構,所以平常 Dao 要做的事,你可以把它放在 Service 裡做,或著你也可以另外擴充 Dao 的架構的話。



上一篇
認識 Sails.js - 安裝 Sails.js
下一篇
認識 Sails.js - 專案結構 (2)
系列文
認識 Sails.js - 如何建構一個 MVC 網站17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言